home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CHARTP10.ARJ / RULES.H < prev    next >
C/C++ Source or Header  |  1992-01-26  |  1KB  |  67 lines

  1.  
  2. // Copyright 1992, David Perelman-Hall & Jamshid Afshar
  3.  
  4.  
  5. #ifndef RULES_H
  6. #define RULES_H
  7.  
  8. #include <assert.h>
  9. #include "category.h"
  10. #include "edge.h"
  11.  
  12.  
  13. class Rule {
  14. friend ostream& operator << ( ostream& os, const Rule& rule );
  15. friend class RuleList;
  16. private:
  17.    Category _lhs;
  18.    Category_Sequence _rhs;
  19. public:
  20.    // empty constructor
  21.    Rule() {}
  22.    // constructor
  23.    Rule( const Category& lhs, const Category_Sequence& rhs )
  24.       : _lhs(lhs), _rhs(rhs) {}
  25.    // copy constructor
  26.    Rule( const Rule& rule )
  27.       : _lhs(rule._lhs), _rhs(rule._rhs) {}
  28.  
  29.    // assignment operator
  30.    void operator = ( const Rule& rule )
  31.       { _lhs = rule._lhs; _rhs = rule._rhs; }
  32.  
  33.    bool operator == ( const Rule& rule ) const
  34.       { return _lhs == rule._lhs && _rhs == rule._rhs; }
  35.  
  36.    bool appliesTo( const Edge& edge ) const
  37.       { return edge.label() == _rhs.first();}
  38.  
  39.    //apply a rule
  40.    Edge apply( const Edge& edge ) const
  41.       {
  42.          assert( appliesTo(edge) );
  43.          return Edge(edge.start(), edge.start(), _lhs, _rhs );
  44.       }
  45. };
  46.  
  47.  
  48. const MAX_RULES = 100;
  49.  
  50. class RuleList {
  51. private:
  52.    Rule _arr[MAX_RULES];
  53.    int _num;
  54. public:
  55.    // constructor
  56.    RuleList();
  57.    void read(const char *file_name);
  58.    void add(const char *rule_str);
  59.    const Rule& operator[](int index) const
  60.       { assert( index < _num ); return _arr[index]; }
  61.    int num() const
  62.       { return _num; }
  63. };
  64.  
  65.  
  66. #endif
  67.